package Control;

import Modelo.DefensaEspecial;
import Modelo.PersonajeDTO;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import vista.VentanaJuego;
import vista.VentanaPrincipal;

public class ControlVentanaPrincipal implements ActionListener {
    // <editor-fold defaultstate="collapsed" desc="Atributos">

    public VentanaPrincipal vista = null;
    private ControlVentanaJuego cvj = null;
    public ControlAudioJuego audio = new ControlAudioJuego();

    static {
        Juego.cargarPersonajes();
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Constructor">
    public ControlVentanaPrincipal() {
        vista = new VentanaPrincipal();
        establecerParametrosVentana();
        this.vincularEventos();
        audio.reproducir("Imagenes/caballerosIntro.wav");
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Metodos">
    private void establecerParametrosVentana() {
        this.vista.setLocationRelativeTo(null);
        this.vista.setVisible(true);
    }

    public void vincularEventos() {
        this.vista.Btn_EmpezarJuego.addActionListener(this);
    }

    public boolean personajeSeleccionado() {
        if (vista.Rad_Opcion1.isSelected() == false
                && vista.Rad_Opcion2.isSelected() == false
                && vista.Rad_Opcion3.isSelected() == false
                && vista.Rad_Opcion4.isSelected() == false
                && vista.Rad_Opcion5.isSelected() == false) {
            return false;
        }
        return true;
    }

    public ArrayList<PersonajeDTO> crearCapitulos() {
        ArrayList<PersonajeDTO> capitulos = new ArrayList<PersonajeDTO>();

        if (vista.Cmb_Rounds.getSelectedItem().toString().equals("1")) {
            capitulos.add(Juego.Hades());
        }

        if (vista.Cmb_Rounds.getSelectedItem().toString().equals("2")) {
            int valor = (int) Math.floor(Math.random() * 4 + 1);
            capitulos.add(Juego.LosMalos.get(valor));
            capitulos.add(Juego.Hades());
        }

        if (vista.Cmb_Rounds.getSelectedItem().toString().equals("3")) {
            int valor1 = (int) Math.floor(Math.random() * 4 + 1);
            int valor2 = (int) Math.floor(Math.random() * 4 + 1);
            boolean bandera = true;
            while (bandera == true) {
                if (valor1 == valor2) {
                    valor2 = (int) Math.floor(Math.random() * 4 + 1);
                } else {
                    bandera = false;
                }
            }
            capitulos.add(Juego.LosMalos.get(valor1));
            capitulos.add(Juego.LosMalos.get(valor2));
            capitulos.add(Juego.Hades());
        }

        if (vista.Cmb_Rounds.getSelectedItem().toString().equals("4")) {
            ArrayList<Integer> valores = new ArrayList<Integer>();
            int valor = 0;
            for (int i = 1; i < 5; i++) {
                valores.add(i);
            }
            int aux = valores.size() + 1;
            int cont = 0;

            while (cont != 3) {
                valor = (int) Math.floor(Math.random() * 4 + 1);
                for (int i = 1; i < aux; i++) {
                    if (valor == valores.get(i - 1)) {
                        capitulos.add(Juego.LosMalos.get(i));
                        valores.set(i - 1, 0);
                        cont++;
                    }
                }
            }
            capitulos.add(Juego.Hades());
        }

        if (vista.Cmb_Rounds.getSelectedItem().toString().equals("5")) {
            ArrayList<Integer> valores = new ArrayList<Integer>();
            int valor = 0;
            for (int i = 1; i < 5; i++) {
                valores.add(i);
            }
            int aux = valores.size() + 1;
            int cont = 0;

            while (cont != 4) {
                valor = (int) Math.floor(Math.random() * 4 + 1);
                for (int i = 1; i < aux; i++) {
                    if (valor == valores.get(i - 1)) {
                        capitulos.add(Juego.LosMalos.get(i));
                        valores.set(i - 1, 0);
                        cont++;
                    }
                }
            }
            capitulos.add(Juego.Hades());
        }


        for (int i = 0; i < capitulos.size(); i++) {        //esto es solo para ver las listas, se puede borrar despues
            System.out.println(capitulos.get(i).getNombre());
        }

        return capitulos;
    }

    public PersonajeDTO caballeroAtenea() {
        //Los system.out.println era para ver que se seleccionara c/d caballero
        if (vista.Rad_Opcion1.isSelected() == true) {
            System.out.println("El caballero seleccionado es: Virgo");
            return Juego.Virgo();
        }
        if (vista.Rad_Opcion2.isSelected() == true) {
            System.out.println("El caballero seleccionado es: Sagitario");
            return Juego.Sagitario();
        }
        if (vista.Rad_Opcion3.isSelected() == true) {
            System.out.println("El caballero seleccionado es: Aries");
            return Juego.Aries();
        }
        if (vista.Rad_Opcion4.isSelected() == true) {
            System.out.println("El caballero seleccionado es: Tauro");
            return Juego.Tauro();
        }
        System.out.println("El caballero seleccionado es: Caballeros de bronce");
        return Juego.CaballerosBronce();

    }

    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="Metodos SobreEscritos">
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(vista.Btn_EmpezarJuego)) {
            if (personajeSeleccionado() != false) {
                System.out.println("Los caballeros son: \n");
                System.out.println(vista.Cmb_Rounds.getSelectedItem().toString());

                PersonajeDTO bueno = this.caballeroAtenea();
                ArrayList<PersonajeDTO> malos = this.crearCapitulos();
                this.vista.setVisible(false);
                audio.detener();
                cvj = new ControlVentanaJuego(this, bueno, malos);
                ControlAudioJuego audioJuego = new ControlAudioJuego();
                audioJuego.ruta = "Imagenes/Epic_Battle_Music_Epic_Legend.wav";
            } else {
                JOptionPane.showMessageDialog(vista, "Debe seleccionar un personaje");
            }
        }
    }

    // </editor-fold>
}
